package itHeima.lesson8;

import java.util.Random;
import java.util.Scanner;

public class demo7 {
    /**
     * 双色球
     * 投注号码由6个红色球号码和1个蓝色
     * 球号码组成。红色球号码从1一33中选
     * 择；蓝色球号码从1一16中选择。
     */
    public static void main(String[] args) {
       int [] userSelectNumber = userSelect();
        System.out.println("您投注的号码是");
        printArray(userSelectNumber);

        int[] luckyNumber = randomBall();
        System.out.println();
        System.out.println("机器生成的号码是");
        printArray(luckyNumber);

        System.out.println();

        //判断用户投注的号码是否中奖
        judge(userSelectNumber, luckyNumber);
    }

    //    6个红球1-33 + 1个蓝球1-16

    /**
     * 创建一个数组 用来接受 用户选择的蓝球以及红球
     *
     * @return 返回红球的数组
     */
    public static int[] userSelect() {
//        创建一个用来接受最终号码的动态数组
        int[] arr = new int[7];
//        键盘录入7个数
        Scanner sc = new Scanner(System.in);
//遍历数组，录入数据 录入红球
        for (int i = 0; i < arr.length - 1; i++) {
            while (true) {
                System.out.println("请输入第" + (i + 1) + "红球数");
                int redNumber = sc.nextInt();
                if (redNumber < 1 || redNumber > 33) {
                    System.out.println("输入错误请重新输入");
                } else {
//                    调用重复参数，传递输入红球的数组以及红球的数 进行判断
                    if (chongFu(arr, redNumber)) {
                        System.out.println("你当前的红球重复了");
                    } else {
//                        判断成功 写入数组
                        arr[i] = redNumber;
                        break;
                    }
                }
            }
        }
//        录入蓝球

        while (true) {
            System.out.println("请输入一个蓝球");
            int blueNumber = sc.nextInt();

            if (blueNumber < 1 || blueNumber > 16) {
                System.out.println("输入错误请重新输入");
            } else {
//                蓝球就一个没有重复
                arr[6] = blueNumber;
                break;
            }
        }
//        返回 红球和蓝球的数组
        return arr;
    }

    /**
     *  随机生产 6个红球 1个蓝球
     * @return ball 的数组
     */

    public static int[] randomBall() {
        Random r = new Random();
        int[] ball = new int[7];

//将红球遍历的球写入数组
        for (int i = 0; i < ball.length - 1; i++) {

            while (true) {
                int redball = r.nextInt(33) + 1;
//                如果 没有重复的球 则写入数组 == else
//                前5个球
                if (!chongFu(ball,redball)){
                    ball[i] = redball;

                    break;
                }

            }

        }
//录入蓝球
        int blueball = r.nextInt(16) + 1;
        ball[6] = blueball;

        return ball;
    }

    /**
     *   每当键盘录入一个数，就需要判断这个数在数组中是否存在 防止用户录入重复
     * @param arr 红球数组
     * @param number 输入的数
     * @return 是否重复 true 、 false
     */

    public static boolean chongFu(int[] arr, int number) {
//        判断输入的数在数组中是否存在
        for (int i = 0; i < arr.length; i++) {
//            可能会出现数组中元素有0的情况
            if (arr[i] == 0) {
                break;
            }

            if (arr[i] == number) {
                return true;
            }
        }
        return false;
    }


    /**
     * 用于打印 数组元素
     * @param arr 数组
     */
    public static void printArray(int [] arr){
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(i == arr.length - 1 ? arr[i] : arr[i] + ", ");
        }
        System.out.print("]");
    }

    /** 3、设计一个方法，用于判断用户的中奖情况 */
    public static void judge(int[] userNumbers,int[] luckNumbers){


        // 2、分别定义2个变量用于记住红球命中了几个以及蓝球命中了几个
        int redCount = 0;
        int blueCount = 0;

        // 先判断红球命中的数量。
        // 遍历用户投注的号码的前6个红球
        for (int i = 0; i < userNumbers.length - 1; i++) {
            // userNumbers[i]
            // 开始遍历中奖号码的前6个红球号码，看用户当前选择的这个号码是否命中了
            for (int j = 0; j < luckNumbers.length - 1; j++) {
                if(userNumbers[i] == luckNumbers[j]){
                    redCount++;
                    break;
                }
            }
        }

        // 3、判断蓝球是否命中了
        blueCount = userNumbers[6] == luckNumbers[6] ? 1 : 0;

        System.out.println("您命中的红球数量是：" + redCount);
        System.out.println("您命中的蓝球数量是：" + blueCount);

        // 4、判断中奖详情，并输出结果
        if(redCount == 6 && blueCount == 1){
            System.out.println("恭喜您，中奖1000万，可以开始享受人生了~~~");
        }else if(redCount == 6 && blueCount == 0){
            System.out.println("恭喜您，中奖500万，可以稍微开始享受人生了~~~");
        }else if(redCount == 5 && blueCount == 1){
            System.out.println("恭喜您，中奖3000元，可以出去吃顿小龙虾了~");
        }else if(redCount == 5 && blueCount == 0 || redCount == 4 && blueCount == 1){
            System.out.println("恭喜您，中了小奖：200元~");
        }else if(redCount == 4 && blueCount == 0 || redCount == 3 && blueCount == 1){
            System.out.println("中了10元~");
        }else if( redCount < 3 && blueCount == 1){
            System.out.println("中了5元~");
        }else {
            System.out.println("感谢您对福利事业做出的巨大贡献~~~");
        }
    }
}
